// Saga 来监听所有的 USER_FETCH_REQUESTED action，并触发一个 API 调用获取用户数据。
import { put, takeEvery, takeLatest, all } from 'redux-saga/effects'

import { getMultidata } from 'api/list'

import {
  FETCH_MULTI_DATA
} from '../store-redux-saga/constants'

import {
  addBannersAction, addRecommendAction, fetchMultidataFailAsyncAction
} from '../store-redux-saga/actionCreators'

// worker Saga : 将在 FETCH_MULTI_DATA action 被 dispatch 时调用

function* fetchMultidata(action){
  try {
    const result = yield getMultidata()
    console.log(result);
    
    // 1、
    // yield put(addBannersAction(result.rows))
    // yield put(addRecommendAction(result.rows))
    // 2、
    yield all([
      yield put(addBannersAction(result.rows)),
      yield put(addRecommendAction(result.rows))
    ])
  } catch (error) {
    yield put(fetchMultidataFailAsyncAction(error.msg))
  }
}
function* mySaga() {  //takeEvery(actionType, 异步操作-生成器函数)
  /*
  takeEvery：
    在每个 `FETCH_MULTI_DATA` action 被 dispatch 时调用 fetchMultidata
    允许并发（译注：即同时处理多个相同的 action）
  */
  yield takeEvery(FETCH_MULTI_DATA, fetchMultidata);

  // 多个
  // yield all([
  //   takeEvery(FETCH_MULTI_DATA, fetchMultidata),
  //   takeEvery(FETCH_MULTI_DATA, fetchMultidata)
  // ])

  /*
    也可以使用 takeLatest   
  
    不允许并发，dispatch 一个 `FETCH_MULTI_DATA` action 时，
    如果在这之前已经有一个 `FETCH_MULTI_DATA` action 在处理中，
    那么处理中的 action 会被取消，只会执行当前的
  */
  // yield takeLatest(FETCH_MULTI_DATA, fetchMultidata);

}

export default mySaga;